#include "../src/estructuras/RegistroArbol/RegistroArbol.h"
#include "../src/Dato/DatoInt.h"
#include <iostream>
using namespace std;

void testRegistroArbol(){
	/*
	 * creo un registro. lo serializo y luego lo deserealizido para que ver que
	 * esa operacion anda bien. y tambien para seguir viendo la perdida de memoria
	 * */
	bool test1 = false;
	bool test2 = false;
	bool test3 = false;
	bool test4 = false;
	bool test5 = false;
	//PRUEBA_1		(serealizacion)
	Clave* clave = new ClaveChar("2",1);
	DatoChar* dato = new DatoChar("luis",4); 
	RegistroArbol* reg = new RegistroArbol(clave,dato,'R');
	stringstream* serializado = reg->toStream();
	RegistroArbol* regDeserealizado = reg->crearRegistro(serializado,'R');
	
	//verifico serializacion:
	if (*regDeserealizado->getClave() == *clave || *regDeserealizado->getDato() == *dato ){
		//cout<<"serializacion OK_1"<<endl;
		test1 = true;
	}
	else
		cout<<"serializacion ERROR_1"<<endl;

	//PRUEBA_2		(serealizacion)
	ClaveInt* claveInt = new ClaveInt(1);
	DatoInt* datoInt = new DatoInt(12); 
	reg = new RegistroArbol(claveInt,datoInt,'R');
	serializado = reg->toStream();
	regDeserealizado = reg->crearRegistro(serializado,'R');
	
	//verifico serializacion:
	if (*regDeserealizado->getClave() == *claveInt || *regDeserealizado->getDato() == *datoInt ){
		//cout<<"serializacion OK_2"<<endl;
		test2 = true;
	}
	else
		cout<<"serializacion ERROR_2"<<endl;

	//PRUEBA_3		(operator=)
	ClaveChar* clave_1 = new ClaveChar("3",1);
	DatoChar* dato_1 = new DatoChar("casa",4);
	RegistroArbol* regCopiado = new RegistroArbol();
	RegistroArbol* regOriginal = new RegistroArbol(clave_1,dato_1,'R');

	*regCopiado = *regOriginal;

	if (*regOriginal->getClave() == *regCopiado->getClave() || *regOriginal->getDato() == *regCopiado->getDato() ){
		//cout<<"operator= OK_3"<<endl;
		test3 = true;
	}
	else
		cout<<"operator= ERROR_3"<<endl;

	//PRUEBA_4		(constructor copia)
	ClaveChar* clave_2 = new ClaveChar("4",1);
	DatoChar* dato_2 = new DatoChar("mesa",4);
	RegistroArbol* regOriginal_2 = new RegistroArbol(clave_2,dato_2,'R');
	RegistroArbol* regCopiado_2 = new RegistroArbol(*regOriginal_2);

	if (*regOriginal_2->getClave() == *regCopiado_2->getClave() || *regOriginal_2->getDato() == *regCopiado_2->getDato() ){
		//cout<<"constructor copia OK_4"<<endl;
		test4 = true;
	}
	else
		cout<<"constructor copia ERROR_4"<<endl;


	//PRUEBA_5		(tamaño de el registro)
	unsigned int tam_1 = regOriginal->getTamanio();
	unsigned int tam_2 = regOriginal_2->getTamanio();
	if (tam_1 = (8+8) && tam_2 == (5+8)){
		//cout<<"tamaño registro OK_5"<<endl;
		test5 = true;
	}
	else
		cout<<"tamaño registro ERROR_5"<<endl;
	
	if (test1 && test2 && test3 && test4 && test5)
		cout<<"todas las pruebas OK!"<<endl;
	
}
